/*
 * AircraftCarrierConfiguration.h
 *
 *  Created on: Jun 21, 2009
 *      Author: computer
 */

#ifndef AIRCRAFTCARRIERCONFIGURATION_H_
#define AIRCRAFTCARRIERCONFIGURATION_H_
#include "InvalidBoatConfiguration.h"
#include "RectangularBoatShape.h"

class AircraftCarrierConfiguration {
public:
	AircraftCarrierConfiguration(int);
	virtual ~AircraftCarrierConfiguration();

	static AircraftCarrierConfiguration* createAircraftCarrierConfiguration(int) throw (InvalidBoatConfiguration);

	virtual RectangularBoatShape* getHullShape(const string&, const Point<int>&, char) const = 0;
	virtual RectangularBoatShape* getDeckShape(const string&, const Point<int>&, char) const = 0;

	int getNumberConfiguration() const;
private:
	int numberConfiguration;
};

class AircraftCarrierConfiguration1 : public AircraftCarrierConfiguration {
public:
	AircraftCarrierConfiguration1();
	virtual ~AircraftCarrierConfiguration1();

	virtual RectangularBoatShape* getHullShape(const string&, const Point<int>&, char) const;
	virtual RectangularBoatShape* getDeckShape(const string&, const Point<int>&, char) const;
};

class AircraftCarrierConfiguration2 : public AircraftCarrierConfiguration {
public:
	AircraftCarrierConfiguration2();
	virtual ~AircraftCarrierConfiguration2();

	virtual RectangularBoatShape* getHullShape(const string&, const Point<int>&, char) const;
	virtual RectangularBoatShape* getDeckShape(const string&, const Point<int>&, char) const;
};

class AircraftCarrierConfiguration3 : public AircraftCarrierConfiguration {
public:
	AircraftCarrierConfiguration3();
	virtual ~AircraftCarrierConfiguration3();

	virtual RectangularBoatShape* getHullShape(const string&, const Point<int>&, char) const;
	virtual RectangularBoatShape* getDeckShape(const string&, const Point<int>&, char) const;
};

class AircraftCarrierConfiguration4 : public AircraftCarrierConfiguration {
public:
	AircraftCarrierConfiguration4();
	virtual ~AircraftCarrierConfiguration4();

	virtual RectangularBoatShape* getHullShape(const string&, const Point<int>&, char) const;
	virtual RectangularBoatShape* getDeckShape(const string&, const Point<int>&, char) const;
};

#endif /* AIRCRAFTCARRIERCONFIGURATION_H_ */
